package DAO;

import factory.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.EstadoIntegracao;
import model.Integracao;
import model.TipoIntegracao;

public class IntegracaoDAO {

    private IntegracaoDAO()
    {
        
    }
    
    public static boolean insert(Integracao integracao) {
        String sql;
        sql  = "INSERT INTO INTEGRACAO (SEQUENCIAINTEGRACAO,";
        sql += "                        TIPOINTEGRACAO, ";
        sql += "                        ESTADOINTEGRACAO,";
        sql += "                        DATALOG,";
        sql += "                        DATAPROCESSAMENTO,";
        sql += "                        SEQUENCIARELACIONADA)";
        sql += "                VALUES (?,";
        sql += "                        ?,";
        sql += "                        ?,";
        sql += "                        ?,";
        sql += "                        ?,";
        sql += "                        ?)";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracao.getSequenciaIntegracao());
            stm.setInt(2, integracao.getTipoIntegracao().getTipoIntegracao());
            stm.setInt(3, integracao.getEstadoIntegracao().getEstadoIntegracao());
            stm.setDate(4, integracao.getDataLog());
            stm.setDate(5, integracao.getDataProcessamento());
            stm.setInt(6, integracao.getSequenciaRelacionada());

            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static boolean update(Integracao integracao) {
        String sql;
        sql  = "UPDATE INTEGRACAO";
        sql += "   SET TIPOINTEGRACAO = ?, ";
        sql += "       ESTADOINTEGRACAO = ?, ";
        sql += "       DATALOG = ?, ";
        sql += "       DATAPROCESSAMENTO = ?, ";
        sql += "       SEQUENCIARELACIONADA = ? ";
        sql += " WHERE SEQUENCIAINTEGRACAO = ?";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracao.getTipoIntegracao().getTipoIntegracao());
            stm.setInt(2, integracao.getEstadoIntegracao().getEstadoIntegracao());
            stm.setDate(3, integracao.getDataLog());
            stm.setDate(4, integracao.getDataProcessamento());
            stm.setInt(5, integracao.getSequenciaRelacionada());
            stm.setInt(6, integracao.getSequenciaIntegracao());

            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static boolean delete(Integracao integracao) {
        String sql;
        sql  = "DELETE";
        sql += "  FROM INTEGRACAO";
        sql += " WHERE SEQUENCIAINTEGRACAO = ?";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracao.getSequenciaIntegracao());
            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static ArrayList<Integracao> select() {
        String sql;
        sql  = "SELECT INT.SEQUENCIAINTEGRACAO,";
        sql += "       INT.TIPOINTEGRACAO,";
        sql += "       TIP.DESCRICAOTIPOINTEGRACAO,";
        sql += "       INT.ESTADOINTEGRACAO,";
        sql += "       EST.DESCRICAOESTADOINTEGRACAO,";
        sql += "       INT.DATALOG,";
        sql += "       INT.DATAPROCESSAMENTO,";
        sql += "       INT.SEQUENCIARELACIONADA";
        sql += "  FROM INTEGRACAO INT,";
        sql += "       TIPOINTEGRACAO TIP,";
        sql += "       ESTADOINTEGRACAO EST";
        sql += " WHERE TIP.TIPOINTEGRACAO = INT.TIPOINTEGRACAO";
        sql += "   AND EST.ESTADOINTEGRACAO = INT.ESTADOINTEGRACAO";

        Connection conn;
        PreparedStatement stm;
        ResultSet rs;
        TipoIntegracao tipoIntegracao;
        EstadoIntegracao estadoIntegracao;
        Integracao integracao;
        ArrayList<Integracao> listIntegracao = new ArrayList<Integracao>();
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            rs = stm.executeQuery();
            while (rs.next()) {
                integracao = new Integracao();
                
                tipoIntegracao = new TipoIntegracao();
                tipoIntegracao.setTipoIntegracao(rs.getInt("TIPOINTEGRACAO"));
                tipoIntegracao.setDescricaoTipoIntegracao(rs.getString("DESCRICAOTIPOINTEGRACAO"));
                integracao.setTipoIntegracao(tipoIntegracao);
                
                estadoIntegracao = new EstadoIntegracao();
                estadoIntegracao.setEstadoIntegracao(rs.getInt("ESTADOINTEGRACAO"));
                estadoIntegracao.setDescricaoEstadoIntegracao(rs.getString("DESCRICAOESTADOINTEGRACAO"));
                integracao.setEstadoIntegracao(estadoIntegracao);
                
                integracao.setSequenciaIntegracao(rs.getInt("SEQUENCIAINTEGRACAO"));
                integracao.setDataLog(rs.getDate("DATALOG"));
                integracao.setDataProcessamento(rs.getDate("DATAPROCESSAMENTO"));
                integracao.setSequenciaRelacionada(rs.getInt("SEQUENCIARELACIONADA"));
                listIntegracao.add(integracao);
            }
            stm.close();
            conn.close();
            return listIntegracao;
        } catch (SQLException ex) {
            return null;
        }
    }
}
